import type {
  NotificationDetail,
  NotificationType,
  GroupedNotification,
  UserInfo
} from "@/api/notification";

/** 通知列表项（适配前端展示） */
export interface NoticeListItem {
  /** 通知ID */
  id: number | string;
  /** 头像 */
  avatar: string;
  /** 标题 */
  title: string;
  /** 描述 */
  description: string;
  /** 时间 */
  datetime: string;
  /** 通知类型 */
  type: NotificationType | string;
  /** 是否已读 0-未读 1-已读 */
  isRead: number;
  /** 目标URL */
  targetUrl?: string;
  /** 原始数据 */
  raw?: NotificationDetail;
  /** 聚合通知相关字段 */
  isGrouped?: boolean;
  /** 未读数量（聚合通知） */
  unreadCount?: number;
  /** 总数量（聚合通知） */
  count?: number;
  /** 发送者列表（聚合通知） */
  senders?: UserInfo[];
}

/** 通知选项卡项 */
export interface NoticeTabItem {
  /** 选项卡key */
  key: NotificationType | "ALL";
  /** 选项卡名称 */
  name: string;
  /** 通知列表 */
  list: NoticeListItem[];
  /** 空数据提示文本 */
  emptyText: string;
  /** 未读数量 */
  unreadCount: number;
}

/**
 * 将聚合通知转换为前端展示的列表项
 */
export function convertGroupedNotificationToListItem(
  grouped: GroupedNotification
): NoticeListItem {
  const senders = grouped.senders || [];
  return {
    id: grouped.groupKey,
    avatar: senders[0]?.avatar || "",
    title: grouped.aggregatedTitle,
    description: grouped.target?.title || "",
    datetime: grouped.latestTime,
    type: grouped.type,
    isRead: grouped.unreadCount === 0 ? 1 : 0,
    targetUrl: `/user/article/${grouped.targetId}`,
    isGrouped: true,
    unreadCount: grouped.unreadCount,
    count: grouped.count,
    senders: senders
  };
}

/**
 * 将API返回的通知详情转换为前端展示的列表项
 */
export function convertNotificationToListItem(
  notification: NotificationDetail
): NoticeListItem {
  // 构建标题: 显示用户昵称
  const senderName =
    notification.sender?.nickName || notification.sender?.userName || "系统";
  let title = senderName;

  // 系统通知使用通知类型名
  if (notification.type === "SYSTEM") {
    title = notification.typeName || "系统通知";
  }

  // 使用新的 actionText 字段(更精确的操作描述)
  let description = notification.actionText || "";

  // 只有在评论相关的通知类型中才处理评论详情
  // FOLLOW类型不应该有评论详情
  if (notification.type !== "FOLLOW" && notification.commentDetail?.content) {
    const preview =
      notification.commentDetail.content.length > 50
        ? notification.commentDetail.content.substring(0, 50) + "..."
        : notification.commentDetail.content;
    description = `${description}: "${preview}"`;
  }

  // 构建目标URL(优先使用新的 articleInfo.url)
  let targetUrl = notification.articleInfo?.url || notification.target?.url;

  // 只有在评论相关的通知中才跳转到评论位置
  if (
    notification.type !== "FOLLOW" &&
    targetUrl &&
    notification.commentDetail?.id
  ) {
    targetUrl = `${targetUrl}#comment-${notification.commentDetail.id}`;
  }

  return {
    id: notification.id,
    avatar: notification.sender?.avatar || "",
    title,
    description,
    datetime: notification.createTime,
    type: notification.type,
    isRead: notification.isRead,
    targetUrl,
    raw: notification
  };
}
